package loja.dao.impl.hibernate;

import java.util.List;

import loja.dao.seguranca.SegurancaDAO;
import loja.model.seguranca.PerfilUsuario;
import loja.model.seguranca.Usuario;

import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

public final class SegurancaDAOHibernate implements SegurancaDAO {

	private final Session session;

	public SegurancaDAOHibernate(Session session) {
		this.session = session;
	}

	@Override
	public final void incluirUsuario(Usuario usuario) {
		this.session.save(usuario);

	}

	@Override
	public final void removerUsuario(Usuario usuario) {
		this.session.delete(usuario);

	}

	@Override
	public final void alterarSenha(String nome, String senhaNova) {
		Usuario usuario = consultarUsuario(nome);
		if (usuario != null) {
			usuario.setSenha(senhaNova);
			this.session.update(usuario);
		}

	}

	@Override
	public final void alterarNick(String nome, String nick) {
		Usuario usuario = (Usuario) this.session.createCriteria(Usuario.class)
				.add(Restrictions.idEq(nome)).uniqueResult();
		if (usuario != null) {
			usuario.setNick(nick);
			this.session.update(usuario);
		}

	}

	@Override
	public final Usuario consultarUsuario(String nome) {
		return (Usuario) this.session.createCriteria(Usuario.class)
				.add(Restrictions.idEq(nome)).uniqueResult();
	}

	@SuppressWarnings("unchecked")
	@Override
	public final List<PerfilUsuario> listarPerfisUsuario() {
		return (List<PerfilUsuario>) this.session
				.createQuery(
						"select new loja.model.seguranca.PerfilUsuario(usuario.nome, usuario.nick) from Usuario as usuario")
				.list();

	}

}
